package sql
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{Column, DataFrame, Row, SparkSession}

//todo:利用反射机制实现把rdd转成dataFrame
case class Person(id:String,name:String,age:Int)

object CaseClassSchema {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().appName("CaseClassSchema").master("local[2]").getOrCreate()

    val sc = spark.sparkContext

    //注意这里map操作输出是一对一，但split明显会把一行数据分割成多条数据，但打印的数据
    //正好是四条，每条都是String对象
    val data = sc.textFile("data/user.txt").map(x => x.split(" "))
    data.collect().foreach(println)

    //这个直接把所有值分割输出
    val flatData = sc.textFile("data/user.txt").flatMap(x => x.split(" "))
    flatData.collect().foreach(println)
    //
//    //toDF需要知道结构，所以这里通过样例类，每次读取一行数据
//    val personRDD : RDD[Person] = data.map(x => Person(x(0),x(1),x(2).toInt))
//
//    import spark.implicits._
//    val personDF = personRDD.toDF
//
//    personDF.printSchema()
//    personDF.show()
//
//    val first: Row = personDF.first()
//    println("first:"+first)
  }
}


